"""
Author: HuWen
@file: page_tankmgr.py
@dateTime: 2025/8/27 11:18
加油加油！！！
"""
from playwright.sync_api import Page
from common.base_page import BasePage
from common.locate_by import By
from locators.basicSecurityInformation.basicProcessInfo.loc_tankmgr import TankmgrLoc


class TankMgr(BasePage):
    def __init__(self,page:Page):
        super().__init__(page)
        self.switch_menu("安全基础管理")
        self.switch_menu("生产档案(企业)")

    # 定义操作配置：列表中的每个元素对应一个字段的操作信息
    # 格式：(操作类型, 定位符, 数据键名, 是否需要滚动)
    _field_configs = [
        # 选择操作
        ("select", TankmgrLoc.loc_tankmgr_add_select, "addselect", False),
        ("select", TankmgrLoc.loc_tankmgr_add_select2, "addselect2", False),
        ("select", TankmgrLoc.loc_tankmgr_add_unit, "addunit", False),

        # 填充操作
        ("fill", TankmgrLoc.loc_tankmgr_add_name, "tankmgr_add_name", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_code, "code", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_wlname, "wlname", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_casname, "casname", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_max, "addmax", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_level, "level", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_type, "addtype", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_height, "height", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_diameter, "diameter", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_volume, "volume", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_pressure, "pressure", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_temperature, "temperature", False),
        ("fill", TankmgrLoc.loc_tankmgr_add_latitudeAndLongitude, "latitudeAndLongitude", False),
        # 备注字段需要滚动
        # ("fill", TankmgrLoc.loc_tankmgr_add_note, "note", True),
    ]

    def create_tank(self, data: dict):
        """创建储罐（数据驱动方式）"""
        # 点击初始按钮（保持原有逻辑），进入储罐管理新增页面
        self.check(TankmgrLoc.loc_tankmgrlab)
        self.click(TankmgrLoc.loc_tankmgr_add)

        # 循环处理所有字段（通过配置列表批量执行操作）
        for op_type, locator, data_key, need_scroll in self._field_configs:
            # 获取当前字段的数据（从传入的data字典中取，默认空字符串避免KeyError）
            value = data.get(data_key, "")

            # 如需滚动，先将元素滚动到可见区域
            if need_scroll:
                pass
                # locator.scroll_into_view_if_needed()
                # 这个地方暂时不要，直接跳过

            # 根据操作类型执行对应方法
            if op_type == "select":
                self.select(locator, value)
            elif op_type == "fill":
                self.fill(locator, value)

        # 点击确定按钮（保持原有逻辑）
        self.click(TankmgrLoc.loc_tankmgr_add_determine)

    def view_tank(self,tankmgr_add_name):
        self.fill(TankmgrLoc.loc_tankmgr_queryname,tankmgr_add_name)
        #查看成功新增的元素
        self.click(TankmgrLoc.loc_tankmgr_inquiry_button)

    def edit_tank(self,tankmgr_add_name,code):
        self.fill(TankmgrLoc.loc_tankmgr_queryname,text=tankmgr_add_name)
        #查询，等待查询结果
        self.click(TankmgrLoc.loc_tankmgr_inquiry_button)
        # 定位包含name的单元格（角色为cell）
        tankname_cell = self.page.get_by_role(By.cell, name=tankmgr_add_name)
        # 从单元格向上定位到“行”（角色为row）
        result_row = tankname_cell.locator("..")  # ".." 表示父元素（行容器
        edit_button = result_row.get_by_role(By.button, name="编辑")
        edit_button.wait_for(state="visible", timeout=5000)
        edit_button.click()
        self.fill(TankmgrLoc.loc_tankmgr_edit_code,text=code)
        self.click(TankmgrLoc.loc_editconfirm)





